/* CoralCube | Massively Multiplayer Online Role-Playing Game(MMORPG) Emulator.
|* 
|* Copyright (C) 2008-2010 TrinityCore <http://www.trinitycore.org/>
|*               2008-2010 CoralCube <http://www.CoralCube.com/>
|*
|* This program is free software. You can redistribute it and/or modify it under the terms of 
|* the GNU General Public License as published by the Free Software Foundation, either 
|* version 2 of the License.
|*
|* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY, 
|* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
|* See the GNU General Public License for more details.
|*
|* You should have received a copy of the GNU General Public License along with this program. 
|* If not, see <http://www.gnu.org/licenses/>.
|*/

/* ScriptData
Name: honor_commandscript
%Complete: 100
Comment: All honor related commands
Category: commandscripts
EndScriptData */

#include "ScriptMgr.h"
#include "ObjectMgr.h"
#include "Chat.h"

class honor_commandscript : public CommandScript
{
    public:
        honor_commandscript() : CommandScript("honor_commandscript") { }

        ChatCommand* GetCommands() const
        {
            static ChatCommand honorAddCommandTable[] =
            {
                { "kill",           SEC_GAMEMASTER,     false, &HandleHonorAddKillCommand,         "", NULL },
                { "",               SEC_GAMEMASTER,     false, &HandleHonorAddCommand,             "", NULL },
                { NULL,             0,                  false, NULL,                               "", NULL }
            };
            static ChatCommand honorCommandTable[] =
            {
                { "add",            SEC_GAMEMASTER,     false, NULL,               "", honorAddCommandTable },
                { "update",         SEC_GAMEMASTER,     false, &HandleHonorUpdateCommand,          "", NULL },
                { NULL,             0,                  false, NULL,                               "", NULL }
            };
            static ChatCommand commandTable[] =
            {
                { "honor",          SEC_GAMEMASTER,     false, NULL,                  "", honorCommandTable },
                { NULL,             0,                  false, NULL,                               "", NULL }
            };
            return commandTable;
        }

        static bool HandleHonorAddCommand(ChatHandler* handler, const char* args)
        {
            if (!*args)
                return false;

            Player *target = handler->getSelectedPlayer();
            if (!target)
            {
                handler->SendSysMessage(LANG_PLAYER_NOT_FOUND);
                handler->SetSentErrorMessage(true);
                return false;
            }

            // check online security
            if (handler->HasLowerSecurity(target, 0))
                return false;

            uint32 amount = (uint32)atoi(args);
            target->RewardHonor(NULL, 1, amount);
            return true;
        }

        static bool HandleHonorAddKillCommand(ChatHandler* handler, const char* /*args*/)
        {
            Unit *target = handler->getSelectedUnit();
            if (!target)
            {
                handler->SendSysMessage(LANG_PLAYER_NOT_FOUND);
                handler->SetSentErrorMessage(true);
                return false;
            }

            // check online security
            if (target->GetTypeId() == TYPEID_PLAYER && handler->HasLowerSecurity((Player*)target, 0))
                return false;

            handler->GetSession()->GetPlayer()->RewardHonor(target, 1);
            return true;
        }

        static bool HandleHonorUpdateCommand(ChatHandler* handler, const char* /*args*/)
        {
            Player *target = handler->getSelectedPlayer();
            if (!target)
            {
                handler->SendSysMessage(LANG_PLAYER_NOT_FOUND);
                handler->SetSentErrorMessage(true);
                return false;
            }

            // check online security
            if (handler->HasLowerSecurity(target, 0))
                return false;

            target->UpdateHonorFields();
            return true;
        }
};

void AddSC_honor_commandscript()
{
    new honor_commandscript();
}
